﻿namespace 枚举的应用
{

    // 定义一个枚举类型，可以在整个命名空间中使用
    public enum  QQState
    {
        QQme,
        Offline,
        Online,
        Busy,
        Away,
        Invisible,
        DoNotDisturb,
        FreeForChat,
        Unknown
    }


    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            // 获取枚举类型的所有值
            QQState[] states = (QQState[])Enum.GetValues(typeof(QQState));
            // 遍历枚举值并输出
            foreach (QQState state in states)
            {
                // 输出枚举值的名称和对应的整数值
                Console.WriteLine($"{state} = {(int)state}");
            }

           



            // 提示用户输入QQ状态
            Console.WriteLine("请输入QQ状态（0-8）：");
            // 读取用户输入
            string input = Console.ReadLine();
            // 将输入转换为整数
            int stateValue;
            if (int.TryParse(input, out stateValue))
            {
                // 将整数转换为QQState枚举类型
                QQState state = (QQState)stateValue;

                // 检查输入的值是否在枚举范围内
                if (stateValue < 0 || stateValue > 8)
                {
                    Console.WriteLine("输入无效，请输入0-8之间的数字。");
                    return;
                }

                // 根据枚举值输出对应的状态
                switch (state)
                {
                    case QQState.QQme:
                        Console.WriteLine("QQme");
                        break;
                    case QQState.Offline:
                        Console.WriteLine("离线");
                        break;
                    case QQState.Online:
                        Console.WriteLine("在线");
                        break;
                    case QQState.Busy:
                        Console.WriteLine("忙碌");
                        break;
                    case QQState.Away:
                        Console.WriteLine("离开");
                        break;
                    case QQState.Invisible:
                        Console.WriteLine("隐身");
                        break;
                    case QQState.DoNotDisturb:
                        Console.WriteLine("请勿打扰");
                        break;
                    case QQState.FreeForChat:
                        Console.WriteLine("随时聊天");
                        break;
                    default:
                        Console.WriteLine("未知状态");
                        break;
                }
            }
            else
            {
                Console.WriteLine("输入无效，请输入0-8之间的数字。");
            }
            // 获取枚举类型的所有名称
            string[] names = Enum.GetNames(typeof(QQState));
            // 遍历枚举名称并输出
            foreach (string name in names)
            {
                // 输出枚举名称,间隔一个空格
                Console.Write(name);
                Console.Write(" ");
            }
            // 输出提示信息
            Console.WriteLine("\n请输入QQ状态名称：");
            
            // 读取用户输入
            string inputStr = Console.ReadLine();
            // 将输入转换为QQState枚举类型
            // 使用Enum.TryParse方法将字符串转换为枚举类型
            // 这里使用了Enum.TryParse方法来尝试将字符串转换为枚举类型
            // 如果转换成功，返回true，并将转换后的枚举值赋给stateFromString
            // 如果转换失败，返回false，并将stateFromString赋值为0
            QQState stateFromString;
            // 尝试将字符串转换为QQState枚举类型
            // Enum.TryParse方法的第一个参数是要转换的字符串，第二个参数是一个布尔值，表示是否忽略大小写
            // 第三个参数是输出参数，用于存储转换后的枚举值
            // 如果转换成功，返回true，并将转换后的枚举值赋给stateFromString
            // 如果转换失败，返回false，并将stateFromString赋值为0
            if (Enum.TryParse<QQState>(inputStr, true, out stateFromString))
            {
                // 输出转换后的枚举值
                Console.WriteLine($"字符串 '{inputStr}' 转换为枚举值: {stateFromString}");
            }
            else
            {
                // 输出转换失败的提示信息
                Console.WriteLine($"字符串 '{inputStr}' 无法转换为QQState枚举类型。");
            }


            //// 字符串转换为枚举
            //string str = "Online";
            //if (string.IsNullOrEmpty(str))
            //{
            //    // 检查字符串是否为空或null
            //    Console.WriteLine("字符串为空或null，无法转换为枚举。");
            //}
            //else if (!Enum.IsDefined(typeof(QQState), str))
            //{
            //    // 检查字符串是否在枚举定义范围内
            //    Console.WriteLine($"字符串 '{str}' 不在QQState枚举的定义范围内。");
            //}
            //else
            //{
            //    // 使用Enum.Parse方法将字符串转换为枚举类型
            //    QQState stateFromString = (QQState)Enum.Parse(typeof(QQState), str);
            //    Console.WriteLine($"字符串 '{str}' 转换为枚举值: {stateFromString}");
            //}
        }
    }
}
